/**********************************************************************************************/
/* VSQL_QueryResult.cpp			                                                   			  */
/*                                                                       					  */
/* Copyright Paradigma, 1993-2006															  */
/* All Rights Reserved                                                   					  */
/**********************************************************************************************/
 
#include <VShared/FBL/publ/headers/StdAfx.h>

#include <VShared/VSQL/Database/VSQL_QueryResult.h>


/**********************************************************************************************/
VSQL_Begin_Namespace


/**********************************************************************************************/
QueryResult::QueryResult()
:
	mResultType( kUnknown ),
	mFlags( kNone ),
	mpCursor( NULL ),
	mBoolValue(false),
	mUlongValue( 0 ),
	mpStringValue( NULL ),
	mpExplainStr( NULL )
{
}


/**********************************************************************************************/
QueryResult::QueryResult( const QueryResult& inQueryResult )
:
	mResultType( inQueryResult.get_Type() ),
	mFlags( inQueryResult.get_Flags() ),

	mpCursor( inQueryResult.get_AsCursor() ),
	mBoolValue( inQueryResult.get_AsBoolean() ),
	mUlongValue( inQueryResult.get_AsULong() )
{
	mpStringValue = new String( *(inQueryResult.get_AsString()) );
}


/**********************************************************************************************/
QueryResult::~QueryResult( void )
{
	ForgetObject( mpStringValue );
	ForgetObject( mpExplainStr );
}


#pragma mark -

/**********************************************************************************************/
EQueryType QueryResult::get_Type( void ) const throw()
{
	return mResultType;
}


/**********************************************************************************************/
EQueryFlags QueryResult::get_Flags( void ) const throw()
{
	return mFlags;
}


/**********************************************************************************************/
void QueryResult::SetFlags( EQueryFlags inFlag )
{
	mFlags = (inFlag) ? (EQueryFlags)(mFlags | inFlag) : kNone;
}


#pragma mark -

/**********************************************************************************************/
I_Cursor_Ptr QueryResult::get_AsCursor( void ) const throw()
{
	return mpCursor;
}


/**********************************************************************************************/
void QueryResult::put_AsCursor( I_Cursor_Ptr inpCursor ) throw()
{
	mResultType = kCursor;
	mpCursor = inpCursor;
}


#pragma mark -


/**********************************************************************************************/
bool QueryResult::get_AsBoolean( void ) const throw()
{
	return mBoolValue;
}


/**********************************************************************************************/
void QueryResult::put_AsBoolean( bool inValue ) throw()
{
	mResultType = kBoolean;
	mBoolValue = inValue;
}


#pragma mark -


/**********************************************************************************************/
ulong QueryResult::get_AsULong( void ) const throw()
{
	return mUlongValue;
}


/**********************************************************************************************/
void QueryResult::put_AsULong( ulong inValue ) throw()
{
	mResultType = kULong;
	mUlongValue = inValue;
}


#pragma mark -


/**********************************************************************************************/
const String* QueryResult::get_AsString( void ) const throw()
{
	return mpStringValue;
}


/**********************************************************************************************/
void QueryResult::put_AsString( String*	inpValue ) throw()
{
	// if we have string here we need destroy it
	ForgetObject( mpStringValue );

	mResultType = kString;
	mpStringValue = inpValue;
}


/**********************************************************************************************/
void QueryResult::put_AsString( const String&	inValue ) throw()
{
	mResultType = kString;
	mpStringValue = new String( inValue );
}


#pragma mark -


/**********************************************************************************************/
const String* QueryResult::get_Explanation( void ) const throw()
{
	return mpExplainStr;
}


/**********************************************************************************************/
void QueryResult::put_Explanation( String* inExplainStr )
{
	// if we have string here we need destroy it
	ForgetObject( mpExplainStr );

	mpExplainStr = inExplainStr;
}


/**********************************************************************************************/
VSQL_End_Namespace
